﻿/********************************************************************
	created:		2012/07/21 0:55 
	filename: 		F:\我的项目\文件传输\src\file_transfer\file_transfer_server\svr_net_handler.h
	file ext:		.h
	author:			derrickhu (Yi Hu)

	Modification:
	purpose:		
	copyright:  	free software, We all love freedom
*********************************************************************/

#ifndef SVR_NET_HANDLER_H_
#define SVR_NET_HANDLER_H_

class TcpNetChannel : public MySocket
{
public:
    enum TCP_NET_ERROR_TYPE
    {
        TCP_HANDLER_PROC_SUCC = 0,
        ERROR_START_SERVICE = -20000,        
        ERROR_INIT_NET,
        ERROR_RECV_DATA_FRAME,
    };
public:
    typedef enum TCP_TYPE
    {
        TCP_SVR,
        TCP_CLIENT,
    }TcpNetType;

    TcpNetChannel();

    // 初始化网络
    int net_init(const TcpNetType type,
                 const unsigned short port = 9000, 
                 const int max_conn = MAX_ACCEPT_CLIENT_NUM);        

    // 启动服务，后面需要调用new_client()，
    // 用来接受新的连接
    int service_start();

    // 接受一个新的连接,会产生一个新的TcpNetChannel对象
    // 用完之后需要之后，需要主动删除,这里设计得比较恶心
    TcpNetChannel *new_client();

    // 接收一个完整的数据帧
    int recv_frame(char *buf, const int framehead_len);

    // 获取客户端信息
    const char *get_client_ip();

    unsigned short get_client_port();

private:
    TcpNetType net_type_;

    // 作为服务器通道，以下变量才有作用
    int max_conn_;
    unsigned short svr_port_;
    static const int MAX_ACCEPT_CLIENT_NUM = 300;
};

#endif
